/* queue class        GCW  23/01/95  */

#ifndef _class_queue
#define _class_queue 1
#endif

class queue
{
 front, rear;
 add(x);        // add an item to the rear
 /* get() returns nil from an empty queue  */
 get();         // remove an item from the front
}

queue::queue()
{
 front = rear = nil;
 return this;
}

queue::add(x)
{
 if (typeof(rear))
   rear = (rear[1] = vector { x; nil; });
 else
   front = rear = vector { x; nil; };
}

queue::get()
{
 local item;
 if (!typeof(front)) return nil;
 item = front[0];
 if (!typeof(front = front[1])) rear = nil;
 return item;
}

 